package com.aliyun.messagemgt.entities;

import com.alibaba.excel.annotation.ExcelProperty;
import com.aliyun.messagemgt.common.annotation.CustomAnnotation;
import com.aliyun.messagemgt.common.dto.base.UserInfo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;
import java.util.List;

/**
 * 消息源
 * @author changcong
 *
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class MsgSourceEntity extends UserInfo {
	/**
	 * 消息源自增ID
	 */
	private Long msgSourceId;
	/**
	 * 发送任务编码
	 */
    private String sourceCode;

    /**
     * 发送任务名称
     */
    private String sourceName;

	/**
	 * 消息源编码
	 */
	private String messageCode;

	/**
	 * 消息源名称
	 */
	private String messageName;

	/**
	 * 场景编码
	 */
	private String sceneCode;

	/**
	 * 场景名称
	 */
	private String sceneName;

	/**
	 * 消息类型
	 */
	private String messageType;
    
    /**
     * 推送渠道类型 1 政务微信 2 app 3 网页客户端 4 短信 5 邮件
     */
    private Integer pushChannelType;
    
    /**
     * 推送渠道ID
     */
    private Long pushChannelId;

    @ApiModelProperty(value = "渠道编码")
    private String pushChannelCode;

    /**
     * 推送渠道名字
     */
    private String pushChannelName;


	@ApiModelProperty(value = "消息模板名称")
	private String templateName;

	@ApiModelProperty(value = "消息模板id")
	private Long templateId;

	@ApiModelProperty(value = "消息模板编码")
	private String templateCode;

	@ApiModelProperty(value = "接收组编码")
	private String receiveGroupCode;

    /**
     * 管理员 List<{key； name：}>
     */
    private String owner;
    
    /**
     * 归属部门编码
     */
    private String ownerDept;
    
    /**
     * 归属部门名称
     */
    private String ownerDeptName;
    
    /**
     * 消息源描述 
     */
    private String sourceDescription;
    
    /**
     * 重发推送渠道ID
     */
    private Integer resendChannelId;
    
    /**
     * 重发推送渠道名称
     */
    private String resendChannelName;
    
    /**
     * 流控时间单位 1 分钟 2 小时 3 天
     */
    private Integer flowControlTimeUnit;
    
    /**
     * 流控单位时间内限制
     */
    private Integer flowControlCountLimit;
    
    /**
     * 有效期开始时间
     */
	@JsonFormat( pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date startTime;
    
    /**
     * 有效期结束时间
     */
	@JsonFormat( pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date endTime;
    
    /**
     * 审核状态 2未提交 0 未审核 -1 审核未通过 1 审核通过
     */
//    private Integer auditStatus;
    
    /**
     * 审核备注
     */
//    private String auditDescribe;
    
    /**
     * 删除状态 0未删除，1已删除
     */
    private Integer stateDelete;
    
    private Date timeDelete;
    
    private Date timeCreate;
    
    private String userCreate;
    
    private Date timeUpdate;
    
    private String userUpdate;

    private Integer templateActive;
	/**
	 * 消息模板类型
	 */
	@ApiModelProperty(value = "消息源有效期类型：1：不限 2：一年有效期 3：一个月 4：一周 5：当天有效 6：自定义")
	private Integer sourceType;

	@ApiModelProperty("是否启用 Y-启用 N-停用")
	private String isEnabled;

    //添加vo

	/**
	 * 消息类型名
	 */
	@ExcelProperty(value = "消息类型", index = 8)
	private String messageTypeName;

	@ExcelProperty(value = "分发目标", index = 5)
	private String receiverName;

	@ExcelProperty(value = "分发时间", index = 6)
	private String timeSend;
	/**
	 * 返回给前端的审核状态
	 */
//	private String auditStatusReturn;

	/**
	 * 数据权限  1有数据权限   0无数据权限
	 */
	private Integer dataPrivilege;
	@ExcelProperty(value = "状态", index = 4)
	private String pushResultCodeReturn;

	private Integer pushResultCode;

	private Integer msgSourceType;
	@ExcelProperty(value = "消息来源", index = 7)
	private String msgSourceTypeName;

	private Integer handleLogId;

	//添加query
	/**
	 * 消息源名称或者渠道名称
	 */
	@CustomAnnotation(name="sourceNameOrpushChannelName",  desc = "消息源名称或者渠道名称")
	private String sourceNameOrpushChannelName;

	/**
	 * 消息源名称或者推送目标
	 */
	@CustomAnnotation(name="sourceNameOrReceiverName",  desc = "消息源名称或者推送目标")
	private String sourceNameOrReceiverName;
	/**
	 * 创建时间开始
	 */
	@CustomAnnotation(name="creTimeStart",  desc = "创建时间开始")
	private String creTimeStart;
	/**
	 * 创建时间结束
	 */
	@CustomAnnotation(name="creTimeEnd",  desc = "创建时间结束")
	private String creTimeEnd;

	/**
	 * 排序字段
	 */
	@CustomAnnotation(name="ascOrDesc",  desc = "排序字段")
	private String ascOrDesc;
	/**
	 * 选择的logid列表
	 */
	@CustomAnnotation(name="handleLogIds",  desc = "选择的logid列表")
	private List<Integer> handleLogIds;

	/**
	 * 消息源名称或者管理者名称
	 */
	@CustomAnnotation(name="sourceNameOrOwnerName",  desc = "消息源名称或者管理者名称")
	private String sourceNameOrOwnerName;

	/**
	 * 待办事项的提交时间开始
	 */
	@CustomAnnotation(name="timeCreateTo",  desc = "timeCreateTo")
	private String timeCreateTo;

	/**
	 * 待办事项提交时间结束
	 */
	@CustomAnnotation(name="timeCreateEnd",  desc = "待办事项提交时间结束")
	private String timeCreateEnd;

	/**
	 * 提交时间排序
	 */
	@CustomAnnotation(name="timeCreateOrder",  desc = "提交时间排序")
	private String timeCreateOrder;

	/**
	 * 审批时间排序
	 */
/*	@CustomAnnotation(name="timeUpdateOrder",  desc = "审批时间排序")
	private String timeUpdateOrder;*/

	@CustomAnnotation(name="roleCode",  desc = "roleCode")
	private Integer roleCode;

	/**
	 * 失败重发次数
	 */
	private Integer failureResendTimes;

	/**
	 * 失败重发时间间隔，单位秒
	 */
	private Integer failureResendInterval;
	private String tenantCode;
}
